/**
 * @file   1103.cpp
 * @author Shuang Hu <hsmath@ubuntu>
 * @date   Sun May  9 04:02:59 2021
 * 
 * @brief  PAT 1103:Factorization
 *         algorithm:Backtracking
 * 
 */
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
int maxsum=0;
vector<int> nowsol;
vector<int> finalsol;
bool possibility=false;
void backtrack(int N,int K,int p);
int main(){
    int N,K,p;
    cin>>N>>K>>p;
    finalsol.resize(K);//Capacity = K
    backtrack(N,K,p);
    if(possibility==false){
	cout<<"Impossible";
    }else{
	cout<<N<<" = "<<finalsol[0]<<"^"<<p<<" ";
	for(int i=1;i<K-1;i++){
	    cout<<"+ "<< finalsol[i]<<"^"<<p<<" ";
	}
	cout<<"+ "<<finalsol[K-1]<<"^"<<p;
    }
    cout<<endl;
}
void backtrack(int N,int K,int p){
    static int nowsum=0;
    if(K==0&&N>0){//Prunch
	nowsum=nowsum-nowsol[nowsol.size()-1];
	nowsol.pop_back();
	return;
    }
    if(N<K){//Prunch
	nowsum=nowsum-nowsol[nowsol.size()-1];
	nowsol.pop_back();
	return;
    }
    if(N==0&&K==0){//Find one solution!
	possibility=true;
	if(nowsum>maxsum){
	    maxsum=nowsum;
	    for(int i=0;i<finalsol.size();i++){
		finalsol[i]=nowsol[i];
	    }
	}
	nowsum=nowsum-nowsol[nowsol.size()-1];
	nowsol.pop_back();
	return;
    }
    int max=pow(N,1.0/p);
    for(int i=max;i>=1;i--){
	nowsol.push_back(i);
	nowsum=nowsum+i;
	int N_1=N-pow(i,p);
	int K_1=K-1;
	backtrack(N_1,K_1,p);
    }
    nowsum=nowsum-nowsol[nowsol.size()-1];
    nowsol.pop_back();
    return;
}
